package huanzhao.erp.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import huanzhao.erp.domain.entity.Staff;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import huanzhao.erp.domain.vo.StaffVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

public interface StaffMapper extends BaseMapper<Staff> {

    /**
     * 按条件获取员工信息
     *
     * @param name       员工名（模糊查询）
     * @param teamIds    团队id列表
     * @param purchaser  采购员
     * @param warehouser 仓管员
     * @param maintainer 维修员
     * @return List<Staff>
     * 2024/6/18 上午11:08:14
     */
    IPage<Staff> getStaffByCondition(@Param("name") String name, @Param("teamIds") Set<Long> teamIds, @Param("purchaser") boolean purchaser, @Param("warehouser") boolean warehouser, @Param("maintainer") boolean maintainer, @Param("page") IPage<?> page);

    Staff getStaffBasicById(@Param("id") Long id);

    /**
     * 按类型查询团队里面的员工
     *
     * @param teamId 团队id
     * @param up     是否为上架员工
     * @param qc     是否为质检员工
     * @param input  是否为录入员工
     * @return List<Staff>
     * 2024/6/18 下午6:00:39
     */
    List<Staff> getStaffInTeamByType(@Param("teamId") Long teamId, @Param("up") boolean up, @Param("qc") boolean qc, @Param("input") boolean input);

    /**
     * 根据员工类型获取员工
     *
     * @param maintainer 是否为维修
     * @param warehouser 是否为仓管
     * @param purchaser  是否为采购
     * @return List<Staff>
     * 2024/6/18 下午7:44:44
     */
    List<Staff> getStaffByType(@Param("maintainer") boolean maintainer, @Param("warehouser") boolean warehouser, @Param("purchaser") boolean purchaser);

    /**
     * 根据员工类型获取员工
     *
     * @param maintainer 是否为维修
     * @param warehouser 是否为仓管
     * @param purchaser  是否为采购
     * @return List<Staff>
     * 2024/6/18 下午7:44:44
     */
    List<Staff> getStaffBasicByType(@Param("maintainer") boolean maintainer, @Param("warehouser") boolean warehouser, @Param("purchaser") boolean purchaser);

    /**
     * 检查员工是否存在
     *
     * @param staffId 员工id
     * @return boolean
     * 2024/6/19 下午3:01:18
     */
    boolean exist(@Param("staffId") Long staffId);

    /**
     * 获取所有仓管员id
     *
     * @return List<Long>
     * 2024/6/22 下午1:19:51
     */
    List<Long> getAllWarehouseStaffId();

    /**
     * 根据id查询员工姓名
     *
     * @param staffId 员工id
     * @return String
     * 2024/6/29 下午8:35:13
     */
    String getNameById(@Param("staffId") Long staffId);

    /**
     * 查询所有员工的id和姓名
     *
     * @return List<Staff>
     * 2024/6/29 下午8:43:05
     */
    List<StaffVO> getAllStaffIdAndName();

    /**
     * 获取团队中的员工
     *
     * @param teamId 团队id
     * @return List<Staff>
     * 2024/7/20 下午12:58:32
     */
    List<Staff> getStaffInTeam(@Param("teamId") Long teamId);

    /**
     * 修改员工密码
     *
     * @param staffId 员工id
     * @param newPass 新密码
     *                2024/6/13 下午2:27:57
     */
    void updateStaffPass(@Param("staffId") Long staffId, @Param("newPass") String newPass);

    /**
     * 修改员工姓名
     *
     * @param staffId 员工id
     * @param name    员工姓名
     * @return void
     * 2024/6/13 下午2:39:48
     */
    void updateStaffName(@Param("staffId") Long staffId, @Param("name") String name);

    /**
     * 修改员工手机号
     *
     * @param staffId 员工id
     * @param phone   员工手机号
     * @return void
     * 2024/6/13 下午2:40:30
     */
    void updateStaffPhone(@Param("staffId") Long staffId, @Param("phone") String phone);

    Staff getStaffByPhone(@Param("phone") String phone);

    void addStaff(Staff staff);

    /**
     * 修改员工休假状态
     *
     * @param staffId 员工id
     * @return void
     * 2024/10/4 13:58:27
     */
    void changeStaffVacatingState(@Param("staffId") long staffId);

    /**
     * 修改员工离职状态
     * 2024/10/4 14:02:17
     */
    void changeStaffResignedState(@Param("staffId") long staffId);

    /**
     * 修改员工所在的部门
     * 2024/10/4 20:34:16
     */
    void updateStaffPurchaser(@Param("staffId") long staffId, @Param("purchaser") boolean purchaser);

    void updateStaffWarehouser(@Param("staffId") long staffId, @Param("warehouser") boolean warehouser);

    void updateStaffMaintainer(@Param("staffId") long staffId, @Param("maintainer") boolean maintainer);

    /**
     * 根据id获取员工的权限
     *
     * @return String
     * 2024/10/4 22:39:35
     */
    String getPermissionById(@Param("staffId") Long staffId);

    int updatePermissionById(@Param("id") Long id, @Param("permission") String permission);
}




